/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Negocio;

import Negocio.Cola.Contenedor;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author 
 */
public class PrimeroAnchura extends MetodoBusqueda {

    private Contenedor<Hoja> abierto;
    private Hoja m;


    public PrimeroAnchura() {
        abierto = new Contenedor<Hoja>();
        m = null;
    }

    @Override
    public List<Estado> obtenerOptimo() {
        List<Estado> optimo=new ArrayList<Estado>();
        List<Hoja> camino=arbol.getCaminoOptimo();

        for(int i=0; i<camino.size();i++){
            optimo.add(camino.get(i).getEstado());
        }
        return optimo;
    }

    @Override
    public void procesar() {
//        cargarArbol(7);
        iniciarArbol();
        Hoja raiz = arbol.getRaiz();
        //List<Hoja> optimo = new ArrayList<Hoja>();
        abierto.limpiar();
        abierto.insertar(raiz);
        do{
            try {
                m = abierto.eliminar();
                //m.setEsCamino(true);
                //optimo.add(m);
            } catch (Exception ex) { }

            arbol.cargarHijosDinamico(m);
            List<Hoja> hijos = m.getHijos();

            for(int i=0 ; i < hijos.size() ; i++){
                if(hijos.size() > 0){
                    abierto.insertar(hijos.get(i));
                }
            }

        }while(!m.esEstadoFinal());
        
       ArrayList<Hoja> optimo=new ArrayList<Hoja>();
       Hoja aux = m;
        while(aux!=null)
        {
            aux.setEsCamino(true);
            optimo.add(0,aux);
            aux=aux.getPadre();
        }
        arbol.setCaminoOptimo(optimo);
    }

  
    @Override
    public String toString() {
        return "Primero en Anchura";
    }
}